/*
 * 
 * 
 */

package steg.gui.steg;

import java.awt.Frame;
import java.io.File;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import steg.steki.StegException;
import steg.steki.pm3.PlikMP3;
import steg.utils.MyFileFilter;

/**
 *
 * @author 
 */
public class JDialogPlikMP3 extends JDialogPlik{


// ------------------------------- ZIENNE PRYWATNE -----------------------------
    //-- stałe
    //-- czy
    //-- zmienne

// ------------------------------- ZIENNE PUBLICZNE
    //-- czy
    //-- zmienne

// ------------------------------- KONSTRUKTORY
    public JDialogPlikMP3 ( Frame owner, boolean modal){
        super(owner, "", modal);
        initTilte("MP3 steganografia");
        initPlikIcon("mp364.png");
        initStartOpcje();
        
    }


// ******************************** PUBLICZNE **********************************
// *****************************************************************************
// ------------------------------- FUNKCJE KRYTYCZNE ---------------------------
    @Override
    protected void steganuj(String nazwa) {

        try {

            sekret.setSecretAsText( czyText() );
            sekret.setBitowNaSample( 8 ); //zwsze 8 dla mp3
            sekret.setZnacznik( false); // zawsze false dla mp3
            sekret.setCzyZip( czyGZIP());
            sekret.setCzyHaslo( czyHaslo());
            if(sekret.isCzyHaslo())
                sekret.setSekretHaslo( getHaslo());


            plikStegowany.steg( new File( nazwa ), sekret);


        } catch (StegException ex) {

                raportError(ex,ERROR_INNY,"Błąd podczas steganografii");
                JOptionPane.showMessageDialog(this,ex.getStegMassage(), "Błąd steganograficzny.",
                    JOptionPane.ERROR_MESSAGE);
        } catch (IOException ex) {

                raportError(ex,ERROR_INNY,"Błąd podczas steganografii");
                JOptionPane.showMessageDialog(this, "Nieznany błąd podczas próby stganografi.\n","Błąd steganograficzny.",
                    JOptionPane.ERROR_MESSAGE);
        }
    }
    
    @Override
    protected void loadStegPlik() {

        // a. wczytaj plik
        JFileChooser chooser = new JFileChooser();
        MyFileFilter mff = new MyFileFilter();
        mff.setExtencion(".mp3");

        chooser.addChoosableFileFilter(mff);
        chooser.setCurrentDirectory(new File(PATH_LST_OPEN));

        int returnVal = chooser.showOpenDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {

            try {




                File plik = chooser.getSelectedFile();
                PATH_LST_OPEN = plik.getPath();


                //1 wykrycie typu pliku

                //czy ma rozszerzenie, bez to dodaj . e
                if(PATH_LST_OPEN.indexOf(".")==-1)
                    PATH_LST_OPEN += ".mp3";


                plikStegowany = new PlikMP3();
                plikStegowany.init(new File(PATH_LST_OPEN));
                this.setMetaDane(plikStegowany.getMetaDane());




            } catch (StegException ex) {
                raportError(ex,ERROR_STEG_PLIK,"mp3 niepoprawna");
                JOptionPane.showMessageDialog(this, ex.getStegMassage(),"Błąd steganograficzny!",
                        JOptionPane.ERROR_MESSAGE);




            } catch (IOException ex) {
                raportError(ex,ERROR_STEG_PLIK,"błąd wczytu mp3");
                JOptionPane.showMessageDialog(this, "Błąd wczytania pliku.","Błąd pliku!",
                        JOptionPane.ERROR_MESSAGE);

            } catch (Exception ex) {
                //error nie znany, lepiej wypłapywać wszystko, potem można jak co czeknąć co jest 5
                raportError(ex,ERROR_STEG_PLIK,"błąd przy próbie wczytu mp3");
                JOptionPane.showMessageDialog(this, "Błąd wczytania pliku.","Błąd!!!",
                        JOptionPane.ERROR_MESSAGE);

            }
        }

    }

// ------------------------------- FUNKCJE DODATKOWE ---------------------------
    @Override
    protected void initStartOpcje() {

        super.setIsGZIP(true, true, true);
        super.setIsHaslo(true, true, false);
        super.setIsTag(true, true, true); // nie mozna w mp3 zmienic taga, usunac

    }

    @Override
    protected void zakoncz() {
        //do nic
    }

// ------------------------------- FUNKCJE dziwne ------------------------------



// ******************************** PRYWATNE ***********************************
// *****************************************************************************
// ------------------------------- FUNKCJE KRYTYCZNE


// ------------------------------- FUNKCJE  POMOCNICZE CZY/SET -----------------


}
